/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-01-11
 * Time: 12:55
 */
public class Test_0111 {
    /**
     * 判断字符串是否回文
     *
     * @param str 字符串
     * @return 返回是否正确
     */

    public static boolean judge(String str) {
        if (str.length() == 1) {
            return true;
        }

        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
                return false;
            }
        }

        return true;
    }


    /**
     * 二分法求解开平方根
     *
     * @param x 一个大于等于0 得整数
     * @return 返回算术平方根(向下取整) 5.2 -> 5
     */
    public int sqrt(int x) {
        // write code here
        if (x < 2) {
            return x; // 1/0
        }

        int left = 1;
        int right = x / 2; // X得平方根最大不会超过它得一半
        int mid = 0;  // 运用中数来判断范围
        int ret = 0;
        // 如果
        while (left <= right) {
            mid = left + (right - left) / 2;
            //x = x/mid; //该数如果大于mid 说明下一次mid范围再left+1到right之间
            // 需要缩减范围让中数在一开始得X/2之间
            if ((x / mid) > mid) {
                //记录当前中数
                ret = mid;
                left = mid + 1;
            } else if ((x / mid) < mid) {
                //ret = mid;
                right = mid - 1;
            } else {
                return mid;
            }
        }
        return ret;
    }

    /**
     * 按照K 分割字符串
     * @param s 字符串单词(每个单词只有大小写之分,按照空格分割)
     * @param k 需要分割得单词数目
     * @return 返回指定单词个数得字符串
     */

    public static String truncateSentence1(String s, int k) {
        StringBuilder sb = new StringBuilder();
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == ' ' && --k != 0) {

            }
            if(k == 0) {
                break;
            }
            sb.append(arr[i]);
        }

        return sb.toString();
    }

    public static String truncateSentence2(String s, int k) {
        StringBuilder sb = new StringBuilder();
        String[] arr = s.split(" ");
        for(int i = 0; i < k; i++) {
            sb.append(arr[i]).append(" ");
            //将划分得单词arr[i]拼接到sb中, 并再拼接一个空格
        }
        // 最后面多了一个空格需要处理
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    /**
     *  双指针解决重复元素
     * @param nums 按照升序排列的数组(包含重复元素)
     * @return 返回元素得索引
     */
    public static int removeDuplicates(int[] nums) {
        // 双指针思路

        // 由于nums至少有一个元素,因此 nums = 0 得特殊情况不考虑
        int slow = 0; // 记录重复数并更改
        int fast = 0; // 主要遍历数组
        while(fast < nums.length) {
            if(nums[slow] != nums[fast]) {
                // 由于已经升序排好 不同 则修改
                slow++; // 到此处,表名之前得元素均相同,
                //则当前slow下一个位置需要修改为fast对应元素
                nums[slow] = nums[fast];
            }
            fast++;
        }

        return slow + 1;  // slow从0 开始 索引个数需要加1
    }

    public static void main(String[] args) {

        String s = "I like Beijing ok";
        int k = 3;
        String x = truncateSentence2(s, k);
        System.out.println(x);


    }
}
